package com.hc.fdkgoods.service;

import com.hc.fdkgoods.common.page.PageContent;
import com.hc.fdkgoods.common.page.PageContentContainer;
import com.hc.fdkgoods.dao.WaitPushPageDao;
import com.hc.fdkgoods.vo.vo_3.*;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Service
public class WaitPushPageService {
    @Resource
    private WaitPushPageDao waitPushPageDao;

    public PageContentContainer<SpuListVO> getSpuList(PageContentInputVO_3 pageContentInputVO_3){
        PageContent<SpuListVO> res = new PageContent<>();
        ArrayList<SpuListVO> spuLists = new ArrayList<>();
        PageContentContainer<SKUItemVO> skuList = waitPushPageDao.getSkuItem(pageContentInputVO_3);

        List<SKUItemVO> list = skuList.getList();

        Map<Long, List<SKUItemVO>> spuId2Skus = list.stream().collect(Collectors.groupingBy(SKUItemVO::getSpuId));

        spuId2Skus.forEach((spuId, Skus) -> {
            SKUItemVO skuItemVO = Skus.get(0);
            SpuListVO spuVO = new SpuListVO(skuItemVO);

            spuVO.setSkuList(Skus);
            spuLists.add(spuVO);
        });
        res.setList(spuLists);
        res.setTotal(skuList.getTotal());

        return res;
    }

    public PageContent<ToPreparePushListVO> getPreparePushList(PageContentInputVO_3 pageContentInputVO_3){
        PageContent<ToPreparePushListVO> res = new PageContent<>();
        ArrayList<ToPreparePushListVO> preLists = new ArrayList<>();
        PageContentContainer<SpuListVO> spuList = getSpuList(pageContentInputVO_3);

        List<SpuListVO> list = spuList.getList();

        Map<Long, List<SpuListVO>> supId2Spus = list.stream().collect(Collectors.groupingBy(SpuListVO::getSupplierId));

        supId2Spus.forEach((supId, Spus) -> {
            SpuListVO spuListVO = Spus.get(0);
            ToPreparePushListVO toPreparePushListVO = new ToPreparePushListVO(spuListVO);

            toPreparePushListVO.setSpuList(Spus);
            preLists.add(toPreparePushListVO);
        });
        res.setList(preLists);
        res.setTotal(spuList.getTotal());

        return res;
    }

    public PageContent<PageContentContainerSKUVO> getPageContentContainerSKU(PageContentInputVO_3 pageContentInputVO_3){
        PageContent<PageContentContainerSKUVO> res = new PageContent<>();
        ArrayList<PageContentContainerSKUVO> pageList = new ArrayList<>();
        PageContentContainer<ToPreparePushListVO> preList = getPreparePushList(pageContentInputVO_3);

        List<ToPreparePushListVO> list = preList.getList();

        PageContentContainerSKUVO p = new PageContentContainerSKUVO();
        pageList.add(p);
        res.setList(pageList);
        res.setTotal(preList.getTotal());

        return res;
    }
}
